/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package agb.servlets;

import agb.Controlador.UsuarioLOG;
import agb.Modelo.Alumno;
import agb.Modelo.Asistencias;
import agb.Modelo.Horarios;
import agb.Modelo.PromedioExonerados;
import agb.Modelo.Promedios;
import agb.Modelo.PromediosExo;
import agb.Modelo.ProyectosComunicados;
import agb.Modelo.Publicaciones;
import agb.Modelo.Utilidades;
import com.google.gson.Gson;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Vector;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Administrator
 */
public class SrvServletApoderado extends HttpServlet {
   
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
           String accion = request.getParameter("accion");
           if(accion.equalsIgnoreCase("horarioAlumno")){
                HorariosAlumno(request, response);
           }else{
                if(accion.equalsIgnoreCase("detalleComun")){
                    detalleComunicados(request, response);
                    
                }else{
                    if(accion.equalsIgnoreCase("comunicadoPariente")){
                        cabeceraComunicados(request, response);
                    }else{
                        if(accion.equalsIgnoreCase("comboPeriodo")){
                            comboPeriodo(request, response);
                        }else{
                            if(accion.equalsIgnoreCase("notas")){
                                notasPeriodo(request, response);
                            }else{
                                if(accion.equalsIgnoreCase("Periodo")){
                                    periodoAsistencia(request, response);
                                }else{
                                    if(accion.equalsIgnoreCase("resumenAsistencia")){
                                        resumenAsistencia(request, response);                                        
                                    }else{
                                        if(accion.equalsIgnoreCase("listaAsistencia")){
                                            detalleAsistencia(request, response);
                                        }else if(accion.equalsIgnoreCase("comboPeriodoMes")){
                                            comboPeriodoMensual(request, response);
                                        }else if(accion.equalsIgnoreCase("infoAlumno")){
                                            infoAlumno(request, response);
                                        }
                                         else{
                                                                            
                                                if(accion.equalsIgnoreCase("descargaArticulo"))
                                                {
                                                    descargas(request, response);
                                                }
                                                  else 
                                                if(accion.equalsIgnoreCase("descargaCurricula"))
                                                {
                                                    descargas(request, response);
                                                }

                                                  else 
                                                if(accion.equalsIgnoreCase("descargaRegla"))
                                                {
                                                    descargas(request, response);
                                                }
                                                  else 
                                                if(accion.equalsIgnoreCase("descargaTramite"))
                                                {
                                                    descargas(request, response);
                                                }
                                                  else 
                                                if(accion.equalsIgnoreCase("configuracion"))
                                                {
                                                    configuracion(request, response);
                                                }
                                            }
                                    }
                                }
                            }
                        }
                    }
                }
            }
         } finally { 
            out.close();
        }
    }
  protected void configuracion(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException
     {
          response.setContentType("text/html;charset=UTF-8");
          
           this.getServletContext().getRequestDispatcher("/dinamica/apoderado/Configuracion/Configuracion.jsp").forward(request, response);
     }
    protected void HorariosAlumno(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        HttpSession session = request.getSession(true);
        try {
            
            ArrayList listaCodAlumnos = new ArrayList();
            int codPersona = Integer.parseInt(session.getAttribute("codPersona").toString());
            Utilidades oUtilidades=new Utilidades();
            listaCodAlumnos = oUtilidades.ListaAlumnosApoderado(codPersona);
          

            
            if(request.getParameter("cboAlumno")==null)
            {
                  request.setAttribute("s_lista_codigos_alumnos", listaCodAlumnos);
                 this.getServletContext().getRequestDispatcher("/dinamica/apoderado/Horario/HorarioAlumno.jsp").forward(request, response);}
                 
            else
            {
                if(request.getParameter("fina")!=null)
                {
           
                      int alumno=Integer.parseInt(request.getParameter("cboAlumno"));
                ArrayList<Horarios> LHorarios = new ArrayList<Horarios> ();
                LHorarios = new Horarios().HorarioAlumnoPorCodigoPersona(alumno,Utilidades.GradoSeccionAlumno(alumno).getCodNivel());
                response.getWriter().write(new Gson().toJson(LHorarios));
                
               
                }
                else
                {
                          int alumno=Integer.parseInt(request.getParameter("cboAlumno"));
                           Utilidades oUtilidad = Utilidades.GradoSeccionAlumno(alumno);
                           response.getWriter().write(new Gson().toJson(oUtilidad));   
                }
            }
                } finally {
            out.close();
        }
    }

     protected void detalleAsistencia(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            String arr[] = request.getParameter("periodo").split(" - ");
            request.setAttribute("lista", new Asistencias().listaAsistenciaAlumnoPorCodigoFechaDesdeYHasta(Integer.parseInt(request.getParameter("codAlumno")), arr[0], arr[1]));
            this.getServletContext().getRequestDispatcher("/dinamica/apoderado/include_consulta/detalleAsistencia_alumno.jsp").forward(request, response);
        } finally {
            out.close();
        }
    }

   protected void detalleComunicados(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
           HttpSession session = request.getSession(true);
            RequestDispatcher rd;
            int codComunicado = Integer.parseInt(request.getParameter("codComunicado"));
            request.setAttribute("r_estilo", true);
            String next = "/dinamica/apoderado/include_comunicado/doc_comunicadosDetalle.jsp";
            ProyectosComunicados oComunicado = new ProyectosComunicados();
            oComunicado = ProyectosComunicados.detalleComunicadoPorCodComunicadoPariente(codComunicado);
            session.setAttribute("DcomunicadoPariente", oComunicado);
            rd=this.getServletContext().getRequestDispatcher(next);
            rd.forward(request,response);
        } finally {
            out.close();
        }
    }

  protected void cabeceraComunicados(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
//           HttpSession session = request.getSession(true);
        
//
//          String codPersona = (session.getAttribute("s_cod_persona") == null) ? "" : (String) session.getAttribute("s_cod_persona");
//          int cod = Integer.parseInt(codPersona);

             HttpSession session = request.getSession(true);
            int codPersona = Integer.parseInt(session.getAttribute("codPersona").toString());
             //LReuniones = ProyectosComunicados.ListaCabeceraComunicadoPorNivelGradoSeccionTipo(4, 2, 1);
          int tipo = Integer.parseInt(request.getParameter("tipo"));
           ArrayList<Utilidades> L = Utilidades.GradoSeccionAlumnosSegunPariente(codPersona);
           ArrayList<Integer> codNG = new ArrayList<Integer>();
           for(Utilidades o: L){
                int codGradoSeccion = Utilidades.nivelGradoAlumno(o.getCodGrado(), o.getCodNivel());
                codNG.add(codGradoSeccion);
           }
           String sql = "   ";
           // (C.cod_nivelgrado = 4 AND C.cod_aula = 2) OR
           for(int i=0;i<L.size();i++){
                Utilidades o = L.get(i);
                int codGS = codNG.get(i);
               sql += " (C.cod_nivelgrado = " + codGS + " AND C.cod_aula = " + o.getCodSeccion() + " ) OR ";
           }
           sql = sql.substring(0, sql.length()-3);
           ArrayList<ProyectosComunicados> LActividades = new ArrayList<ProyectosComunicados>();
           LActividades = ProyectosComunicados.ListaCabeceraComunicadoPorNivelGradoSeccionTipoApoderado(sql, tipo);
         //  request.setAttribute("r_estilo", true);
           String next = "";
           switch (tipo){
               case 1:
                   next = "/dinamica/apoderado/Comunicados/ComunicadoReunion.jsp";
                   break;
               case 2:
                   next = "/dinamica/apoderado/Comunicados/ComunicadoActividad.jsp";
                   break;
               case 3:
                   next = "/dinamica/apoderado/Comunicados/ComunicadoCalendario.jsp";
                   break;
               case 4:
                   next = "/dinamica/apoderado/Comunicados/ComunicadoAnuncio.jsp";
                   break;

           }
           
              request.setAttribute("comunicadosPariente", LActividades);
              this.getServletContext().getRequestDispatcher(next).forward(request, response); 
        } finally {
            out.close();
        }
    }
  
    protected void comboPeriodo(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            HttpSession session = request.getSession(true);            
            int cod = Integer.parseInt(session.getAttribute("codPersona").toString());            
            Date fechaActual = new Date();                       
            List<String> LMuestraPeriodos = null;              
            LMuestraPeriodos = new ArrayList<String> ();                
            if((((fechaActual.getMonth()+1)>=4) )|| ((fechaActual.getMonth()+1)<=5)){
                LMuestraPeriodos.add("21- Primer Bimestre");
            }
            if((((fechaActual.getMonth()+1)>=6) )|| ((fechaActual.getMonth()+1)<=7) ){
                LMuestraPeriodos.add("22- Segundo Bimestre");
            }                
            if((((fechaActual.getMonth()+1)>=8))|| ((fechaActual.getMonth()+1)<=9) ){
                LMuestraPeriodos.add("23- Tercer Bimestre");
            }                
            if((((fechaActual.getMonth()+1)>=10) )|| ((fechaActual.getMonth()+1)<=11) ){
                LMuestraPeriodos.add("24- Cuarto Bimestre"); 
                LMuestraPeriodos.add("00- Exonerados"); 
            }
            List<Utilidades> listaCodAlumnos = new ArrayList<Utilidades>();
            Utilidades oUtilidades=new Utilidades();
            listaCodAlumnos = oUtilidades.ListaAlumnosApoderado(cod);
            request.setAttribute("alumnos", listaCodAlumnos);
            request.setAttribute("periodos", LMuestraPeriodos);
            request.setAttribute("codigo", cod);
            this.getServletContext().getRequestDispatcher("/dinamica/apoderado/Notas/NotasPeriodobimestre.jsp").forward(request,response);
            
        } finally {
            out.close();
        }
    }
    
    protected void comboPeriodoMensual(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            HttpSession session = request.getSession(true);            
            int cod = Integer.parseInt(session.getAttribute("codPersona").toString());
            System.out.println("codPersona: " + cod);
            Date fechaActual = new Date();
            Vector<String> LMuestraPeriodos = null;  
            LMuestraPeriodos = new Vector<String>();                
            
                LMuestraPeriodos.add("1- Primer Mes");
            
            if((((fechaActual.getMonth()+1)>=4) ) ){
                LMuestraPeriodos.add("2- Segundo Mes");
            }                
            if((((fechaActual.getMonth()+1)>=5))){
                LMuestraPeriodos.add("3- Tercer Mes");
            }                
            if((((fechaActual.getMonth()+1)>=6) )){
                LMuestraPeriodos.add("4- Cuarto Mes"); 
            }
            if((((fechaActual.getMonth()+1)>=7) ) ){
                LMuestraPeriodos.add("5- Quinto Mes");
            }
            if((((fechaActual.getMonth()+1)>=8) ) ){
                LMuestraPeriodos.add("6- Sexto Mes");
            }
            if((((fechaActual.getMonth()+1)>=9) ) ){
                LMuestraPeriodos.add("7- Setimo Mes"); 
            }
            if((((fechaActual.getMonth()+1)>=10) ) ){
                LMuestraPeriodos.add("8- Octavo Mes"); 
            }            
            List<Utilidades> listaCodAlumnos = new ArrayList<Utilidades>();
            Utilidades oUtilidades=new Utilidades();
            listaCodAlumnos = oUtilidades.ListaAlumnosApoderado(cod);
            request.setAttribute("alumnos", listaCodAlumnos);
            request.setAttribute("periodos", LMuestraPeriodos);
            this.getServletContext().getRequestDispatcher("/dinamica/apoderado/Notas/NotasPeriodo.jsp").forward(request,response);            
        } finally {
            out.close();
        }
    }
  
    protected void notasPeriodo(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            int periodo = Integer.parseInt(request.getParameter("cboPeriodo"));
            int codigo  = Integer.parseInt(request.getParameter("cboAlumno"));
            if(periodo!=0){
                ArrayList<Promedios> LNotas = new ArrayList<Promedios>();
                Promedios cabecera = new Promedios();
                ArrayList<Promedios> LPromMes1 = new ArrayList<Promedios>();
                ArrayList<Promedios> LPromMes2 = new ArrayList<Promedios>();
                ArrayList<Promedios> LPromMes3 = new ArrayList<Promedios>();
                ArrayList<Promedios> LNotasBimestrales = new ArrayList<Promedios>();
                ArrayList<Promedios> LNotasTrimestrales = new ArrayList<Promedios>();
                String next = "";
                switch(periodo){
                    case 1:
                        LNotas = Promedios.notasMes01(codigo);
                        cabecera.setNota1(1);
                        cabecera.setNota2(2);
                        cabecera.setNota3(3);
                        cabecera.setMensual(1);
                        break;
                    case 2:
                        LNotas = Promedios.notasMes02(codigo);  
                        cabecera.setNota1(4);
                        cabecera.setNota2(5);
                        cabecera.setNota3(6);
                        cabecera.setMensual(2);
                        break;
                    case 3:
                        LNotas = Promedios.notasMes03(codigo);  
                        cabecera.setNota1(7);
                        cabecera.setNota2(8);
                        cabecera.setNota3(9);
                        cabecera.setMensual(3);
                        break;
                    case 4:
                        LNotas = Promedios.notasMes04(codigo); 
                        cabecera.setNota1(10);
                        cabecera.setNota2(11);
                        cabecera.setNota3(12);
                        cabecera.setMensual(4);
                        break;
                    case 5:
                        LNotas = Promedios.notasMes05(codigo);
                        cabecera.setNota1(13);
                        cabecera.setNota2(14);
                        cabecera.setNota3(15);
                        cabecera.setMensual(5);
                        break;
                    case 6:
                         LNotas = Promedios.notasMes06(codigo);
                         cabecera.setNota1(16);
                         cabecera.setNota2(17);
                         cabecera.setNota3(18);
                         cabecera.setMensual(6);
                        break;
                    case 7:
                         LNotas = Promedios.notasMes07(codigo);
                         cabecera.setNota1(19);
                         cabecera.setNota2(20);
                         cabecera.setNota3(21);
                         cabecera.setMensual(7);
                        break;
                    case 8:
                         LNotas = Promedios.notasMes08(codigo);
                         cabecera.setNota1(22);
                         cabecera.setNota2(23);
                         cabecera.setNota3(24);
                         cabecera.setMensual(8);
                        break;
                    case 9:
                         LNotas = Promedios.notasMes09(codigo);
                         cabecera.setNota1(25);
                         cabecera.setNota2(26);
                         cabecera.setNota3(27);                     
                         cabecera.setMensual(9);
                        break;
                    case 21:
                            cabecera.setNota1(1);
                            cabecera.setNota2(2);                                             
                            cabecera.setMensual(1);
                            LNotasBimestrales = Promedios.notasBimestre01(codigo);
                            LPromMes1 = Promedios.notasMes01(codigo);
                            LPromMes2 = Promedios.notasMes02(codigo);
                        break;                    
                    case 22:
                            cabecera.setNota1(3);
                            cabecera.setNota2(4);                                             
                            cabecera.setMensual(2);
                            LNotasBimestrales = Promedios.notasBimestre02(codigo);
                            LPromMes1 = Promedios.notasMes03(codigo);
                            LPromMes2 = Promedios.notasMes04(codigo);
                        break;
                    case 23:
                            cabecera.setNota1(5);
                            cabecera.setNota2(6);                                             
                            cabecera.setMensual(3);
                            LNotasBimestrales = Promedios.notasBimestre03(codigo);
                            LPromMes1 = Promedios.notasMes05(codigo);
                            LPromMes2 = Promedios.notasMes06(codigo);
                        break;
                    case 24:
                            cabecera.setNota1(7);
                            cabecera.setNota2(8);                                             
                            cabecera.setMensual(4);
                            LNotasBimestrales = Promedios.notasBimestre04(codigo);
                            LPromMes1 = Promedios.notasMes07(codigo);
                            LPromMes2 = Promedios.notasMes08(codigo);
                        break;
                    case 31:
                        cabecera.setNota1(1);
                        cabecera.setNota2(2); 
                        cabecera.setNota3(3);
                        cabecera.setMensual(1);
                        LNotasTrimestrales = Promedios.notasTrimestre01(codigo);
                        LPromMes1 = Promedios.notasMes01(codigo);
                        LPromMes2 = Promedios.notasMes02(codigo);
                        LPromMes3 = Promedios.notasMes03(codigo);
                        break;
                    case 32:
                        cabecera.setNota1(4);
                        cabecera.setNota2(5); 
                        cabecera.setNota3(6);
                        cabecera.setMensual(2);
                        LNotasTrimestrales = Promedios.notasTrimestre02(codigo);
                        LPromMes1 = Promedios.notasMes04(codigo);
                        LPromMes2 = Promedios.notasMes05(codigo);
                        LPromMes3 = Promedios.notasMes06(codigo);
                        break;
                    case 33:
                        cabecera.setNota1(7);
                        cabecera.setNota2(8); 
                        cabecera.setNota3(9);
                        cabecera.setMensual(3);
                        LNotasTrimestrales = Promedios.notasTrimestre03(codigo);
                        LPromMes1 = Promedios.notasMes07(codigo);
                        LPromMes2 = Promedios.notasMes08(codigo);
                        LPromMes3 = Promedios.notasMes09(codigo);
                        break;
                }
                ArrayList<Promedios> NuevaListaProm = new ArrayList<Promedios>();
                 Utilidades oUtil = Utilidades.GradoSeccionAlumno(codigo);
                 ArrayList<Horarios> LCursos = new ArrayList<Horarios>();
                  LCursos = Horarios.listaCursosAlumnoSegunHorario(codigo);
                 int pesoM = Promedios.PesoMes(oUtil.getCodNivel());              
                 int pesoPM = Promedios.PesoPromedioMes(oUtil.getCodNivel());                
                 int pesoB = Promedios.PesoBimTrimestral(oUtil.getCodNivel()); 

                if(periodo>0 && periodo<10){
                    next = "/dinamica/apoderado/Notas/ajaxNotasMensuales.jsp";
                    ArrayList<Promedios> NuevaLista = new ArrayList<Promedios>();
                    NuevaLista = Promedios.OrdenarNotas(LNotas, LCursos);         
                    NuevaListaProm = Promedios.calculaPromedio(NuevaLista, 3, pesoM); 
                }
                if(periodo>20 && periodo < 25){
                    next = "/dinamica/apoderado/Notas/ajaxNotasBimestrales.jsp";
                    ArrayList<Promedios> LPromMesOrd1 = new ArrayList<Promedios>();
                    ArrayList<Promedios> LPromMesOrd2 = new ArrayList<Promedios>();               
                    LPromMesOrd1 = Promedios.OrdenarNotas(LPromMes1, LCursos);
                    LPromMesOrd2 = Promedios.OrdenarNotas(LPromMes2, LCursos);
                    ArrayList<Promedios> LPromMesOrdShow1 = new ArrayList<Promedios>();
                    ArrayList<Promedios> LPromMesOrdShow2 = new ArrayList<Promedios>();
                    LPromMesOrdShow1 = Promedios.calculaPromedio(LPromMesOrd1, 3, pesoM);
                    LPromMesOrdShow2 = Promedios.calculaPromedio(LPromMesOrd2, 3, pesoM);
                    ArrayList<Promedios> LPromBimestral = new ArrayList<Promedios>();
                    Promedios notas = null;
                    for(Horarios o: LCursos){
                        notas = new Promedios();
                        notas.setCurso(o.getNombreCurso());
                        for(Promedios P1: LPromMesOrdShow1){
                            if(P1.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                                notas.setMes1(P1.getPromedioMes());
                            }
                        }
                        for(Promedios P2: LPromMesOrdShow2){
                            if(P2.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                                notas.setMes2(P2.getPromedioMes());
                            }
                        }
                        for(Promedios NB: LNotasBimestrales){
                            if(NB.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                                notas.setNotaBimestral(NB.getNotaBimestral());
                            }
                        }
                    LPromBimestral.add(notas);
                    }
                    NuevaListaProm = new Promedios().calculaPromBimestral(LPromBimestral, 1, pesoB);
                }
                if(periodo>30 && periodo < 34){
                    next = "/dinamica/apoderado/include_consulta/result_notas_trimestre.jsp";
                    ArrayList<Promedios> LPromMesOrd1 = new ArrayList<Promedios>();
                    ArrayList<Promedios> LPromMesOrd2 = new ArrayList<Promedios>();
                    ArrayList<Promedios> LPromMesOrd3 = new ArrayList<Promedios>();
                    LPromMesOrd1 = Promedios.OrdenarNotas(LPromMes1, LCursos);
                    LPromMesOrd2 = Promedios.OrdenarNotas(LPromMes2, LCursos);
                    LPromMesOrd3 = Promedios.OrdenarNotas(LPromMes3, LCursos);
                    ArrayList<Promedios> LPromMesOrdShow1 = new ArrayList<Promedios>();
                    ArrayList<Promedios> LPromMesOrdShow2 = new ArrayList<Promedios>();
                    ArrayList<Promedios> LPromMesOrdShow3 = new ArrayList<Promedios>();
                    LPromMesOrdShow1 = Promedios.calculaPromedio(LPromMesOrd1, 3, pesoM);
                    LPromMesOrdShow2 = Promedios.calculaPromedio(LPromMesOrd2, 3, pesoM);
                    LPromMesOrdShow3 = Promedios.calculaPromedio(LPromMesOrd3, 3, pesoM);
                    ArrayList<Promedios> LPromTrimestral = new ArrayList<Promedios>();
                    Promedios notas = null;
                    for(Horarios o: LCursos){
                        notas = new Promedios();
                        notas.setCurso(o.getNombreCurso());
                        for(Promedios P1: LPromMesOrdShow1){
                            if(P1.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                                notas.setMes1(P1.getPromedioMes());
                            }
                        }
                        for(Promedios P2: LPromMesOrdShow2){
                            if(P2.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                                notas.setMes2(P2.getPromedioMes());
                            }
                        }
                        for(Promedios P3: LPromMesOrdShow3){
                            if(P3.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                                notas.setMes3(P3.getPromedioMes());
                            }
                        }
                        for(Promedios NB: LNotasTrimestrales){
                            if(NB.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                                notas.setNotaTrimestral(NB.getNotaTrimestral());
                            }
                        }
                        LPromTrimestral.add(notas);
                    }
                    NuevaListaProm = Promedios.calculaPromTrimestral(LPromTrimestral, pesoPM, pesoB);
                }         
                request.setAttribute("notas", NuevaListaProm);
                request.setAttribute("cabecera", cabecera);
                this.getServletContext().getRequestDispatcher(next).forward(request,response);
            }else{
                notasExonerados(request, response);
            }
        } finally {
            out.close();
        }
    }

  protected void periodoAsistencia(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
           HttpSession session = request.getSession(true);
            RequestDispatcher rd;
            
            request.setAttribute("r_estilo", true);
            String next = "/dinamica/apoderado/include_consulta/asistencia_alumno.jsp";
            Utilidades oUtil = new Utilidades();
            int codPersona = Integer.parseInt(request.getParameter("codPersona"));
            oUtil = Utilidades.GradoSeccionAlumno(codPersona);
            Vector<String> Periodos = new Vector<String>();
            Periodos.add("2- Marzo -" + oUtil.getAnioMatriculas());
            Periodos.add("3- Abril -" + oUtil.getAnioMatriculas());
            Periodos.add("4- Mayo -" + oUtil.getAnioMatriculas());
            Periodos.add("5- Junio -" + oUtil.getAnioMatriculas());
            Periodos.add("6- Julio -" + oUtil.getAnioMatriculas());
            Periodos.add("7- Agosto -" + oUtil.getAnioMatriculas());
            Periodos.add("8- Septiembre -" + oUtil.getAnioMatriculas());
            Periodos.add("9- Octubre -" + oUtil.getAnioMatriculas());
            Periodos.add("10- Noviembre -" + oUtil.getAnioMatriculas());
            Periodos.add("11- Diciembre -" + oUtil.getAnioMatriculas());
            session.setAttribute("periodoMes", Periodos);
            session.setAttribute("codAlumno", codPersona);
            rd=this.getServletContext().getRequestDispatcher(next);
            rd.forward(request,response);
        } finally {
            out.close();
        }
    }
  
  protected void infoAlumno(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            Utilidades oUtilidad = Utilidades.GradoSeccionAlumno(Integer.parseInt(request.getParameter("alumno")));
            StringBuilder sb = new StringBuilder();     
            sb.append("[\"" + oUtilidad.getNivel() + "\",\"" + oUtilidad.getGrado()  + "\",\""+ oUtilidad.getSeccion() +"\"]");            
            String str = sb.toString();
            if(str.equals("")){
                str = "[]";
            }            
            System.out.println("str: " + str);
            out.println(str);
        } finally {
            out.close();
        }
    }
  
     protected void resumenAsistencia(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            ArrayList listaCodAlumnos = new ArrayList();
            HttpSession session = request.getSession(true);
            int codPersona = Integer.parseInt(session.getAttribute("codPersona").toString());
            Utilidades oUtilidades=new Utilidades();
            listaCodAlumnos = oUtilidades.ListaAlumnosApoderado(codPersona);
            request.setAttribute("s_lista_codigos_alumnos", listaCodAlumnos);          
            if(request.getParameter("cboAlumno")==null && request.getParameter("mes")==null)
            {
                 this.getServletContext().getRequestDispatcher("/dinamica/apoderado/Asistencia/Asistencia.jsp").forward(request, response);
            }
            else
            {
                if(request.getParameter("cboAlumno")!=null)
                {
                    int alumno=Integer.parseInt(request.getParameter("cboAlumno"));
                    Utilidades oUtilidad = Utilidades.GradoSeccionAlumno(alumno);
                     response.getWriter().write(new Gson().toJson( oUtilidad));
                }
            }
                      
          
//           HttpSession session = request.getSession(true);
//           String datos = request.getParameter("cboPeriodo");
//           String ndatos [] = datos.split("-");    
//           RequestDispatcher rd;
//           Vector<Asistencias> LResumen  = new Vector<Asistencias>();
//            Calendar cal = GregorianCalendar.getInstance(); 
//           int mes = Integer.parseInt(ndatos[0]);
//            int cod = Integer.parseInt(ndatos[1]);            
//            int anio = Integer.parseInt(ndatos[2]);       
//            cal.set(anio, mes, 1);
//            String fechaDesde =  cal.getActualMinimum(GregorianCalendar.DAY_OF_MONTH) + "/" + (mes + 1) + "/" + (anio );
//            String fechaHasta = cal.getActualMaximum(GregorianCalendar.DAY_OF_MONTH) + "/" + (mes + 1) + "/" + (anio );
//            LResumen = Asistencias.resumenAsistenciaAlumnoPorCodigoFechaDesdeYHasta(cod, fechaDesde, fechaHasta);
//            String periodo = fechaDesde + " - " +fechaHasta;            
//            request.setAttribute("r_estilo", true);
//            String next = "/dinamica/apoderado/include_consulta/rpt_asistencias_alumno.jsp";
//            session.setAttribute("resumenAsistencia", LResumen);
//            session.setAttribute("periodo", periodo);
//            session.setAttribute("codPersona", cod);
//            rd=this.getServletContext().getRequestDispatcher(next);
//            rd.forward(request,response);
        } finally {
            out.close();
        }
    }
    protected void notasExonerados(HttpServletRequest request, HttpServletResponse response)     throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            int codPersona  = Integer.parseInt(request.getParameter("cboAlumno"));
            Utilidades oUtil = new Utilidades().GradoSeccionAlumno(codPersona);
            List<Utilidades> listaCurso = new Utilidades().ListacursosPorNivelGrado(oUtil.getCodNivel(), oUtil.getCodGrado());        
            double pesoM = new Promedios().PesoMes(oUtil.getCodNivel());              
            double pesoB = new Promedios().PesoBimTrimestral(oUtil.getCodNivel()); 
            DecimalFormatSymbols dformater_rules = new DecimalFormatSymbols ();
            dformater_rules.setDecimalSeparator ('.');
            DecimalFormat df = new DecimalFormat("0.00", dformater_rules);
            df.setMaximumFractionDigits(2);
            List<PromediosExo> listaFinal = new ArrayList<PromediosExo>();          

          List<PromediosExo> notasGlobal = new PromediosExo().notasGlobales(codPersona);
          llenarListas(notasGlobal);          
          List<PromediosExo> primerBimestre = notasPrimerBimestre(listaCurso, pesoM, pesoB);
          for(int j=0;j<primerBimestre.size();j++){
              PromediosExo p = primerBimestre.get(j);
              PromediosExo promFinal = new PromediosExo();
              promFinal.setCurso(p.getCurso());
              promFinal.setPromBimestre1(Double.parseDouble(df.format(p.getPromedioBimestral())));        
              listaFinal.add(promFinal);
          }           
          List<PromediosExo> segundoBimestre = notasSegundoBimestre(listaCurso, pesoM, pesoB);
          for(int j=0;j<segundoBimestre.size();j++){
              PromediosExo p = segundoBimestre.get(j);
              PromediosExo actual = listaFinal.get(j);
              actual.setPromBimestre2(Double.parseDouble(df.format(p.getPromedioBimestral())));              
          }
          List<PromediosExo> tercerBimestre = notasTercerBimestre(listaCurso, pesoM, pesoB);
          for(int j=0;j<tercerBimestre.size();j++){
              PromediosExo p = tercerBimestre.get(j);
              PromediosExo actual = listaFinal.get(j);
              actual.setPromBimestre3(Double.parseDouble(df.format(p.getPromedioBimestral())));
          }          
          List<PromediosExo> cuartoBimestreProy = notasCuartoBimestreProy(listaCurso, pesoM);
          for(int j=0;j<cuartoBimestreProy.size();j++){
              PromediosExo p = cuartoBimestreProy.get(j);
              PromediosExo actual = listaFinal.get(j);
              actual.setPromBimestre4Proy(Double.parseDouble(df.format(p.getPromedioBimestral())));
          }  
          List<PromedioExonerados> listaprom = new ArrayList<PromedioExonerados>();
          for(PromediosExo actual:listaFinal){
              PromedioExonerados prom = new PromedioExonerados();
              String estado = "";
              boolean esExo = true;
              if(actual.getPromBimestre1()<11){
                  estado = "NO EXONERADO";
                  esExo = false;
              }
              if(actual.getPromBimestre2()<11){
                  estado = "NO EXONERADO";
                  esExo = false;
              }
              if(actual.getPromBimestre3()<11){
                  estado = "NO EXONERADO";
                  esExo = false;
              }
              if(actual.getPromBimestre4Proy()<11){
                  estado = "NO EXONERADO";
                  esExo = false;
              }
              if(esExo){
                  double nota = (actual.getPromBimestre1() + actual.getPromBimestre2() + actual.getPromBimestre3() + actual.getPromBimestre4Proy())/4;
                  if(nota<13){
                      estado = "NO EXONERADO";
                  }else{
                      estado = "EXONERADO";
                  }
              }
              prom.setNombreCurso(actual.getCurso());
              prom.setPromBim1(""+actual.getPromBimestre1());
              prom.setPromBim2(""+actual.getPromBimestre2());
              prom.setPromBim3(""+actual.getPromBimestre3());
              prom.setPromBim4(""+actual.getPromBimestre4Proy());
              prom.setCondicion(estado);
              listaprom.add(prom);
          }
          listaFinal.clear();                                               
          Utilidades oUtilidad = new Utilidades();
          oUtilidad =  Utilidades.GradoSeccionAlumno(codPersona);        
          Alumno oAlumno = new Alumno();
          oAlumno = Alumno.NombreAlumnoSegunCodigo(codPersona);
          for(PromedioExonerados p:listaprom){
              if(p.getNombreCurso().equalsIgnoreCase("TUTORIA")){
                  listaprom.remove(p);
                  break;
              }                  
          }
          request.setAttribute("notas", listaprom);
          request.setAttribute("alumno", oAlumno);
          request.setAttribute("utilidad", oUtilidad);
          this.getServletContext().getRequestDispatcher("/dinamica/apoderado/include_consulta/result_notas_exonerados.jsp").forward(request, response);
          

        } finally {
            out.close();
        }
    }
    
     List<PromediosExo> notaBimestral1 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaBimestral2 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaBimestral3 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaMes1 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaMes2 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaMes3 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaMes4 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaMes5 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaMes6 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaMes7 = new ArrayList<PromediosExo>();
     List<PromediosExo> notaMes8 = new ArrayList<PromediosExo>();
    
    public  List<PromediosExo> notasPrimerBimestre(List<Utilidades> listaCurso, double pesoM, double pesoB){
        List<PromediosExo> LPromMesOrdShow1 = new PromediosExo().calculaPromedio(notaMes1, 3, (int)pesoM);
        List<PromediosExo> LPromMesOrdShow2 = new PromediosExo().calculaPromedio(notaMes2, 3, (int)pesoM);
        List<PromediosExo> LPromBimestral = new ArrayList<PromediosExo>();
        List<PromediosExo> NuevaListaProm = new ArrayList<PromediosExo>();
        PromediosExo notas = null;
        for(int i=0;i< listaCurso.size();i++){
            Utilidades o = listaCurso.get(i);
            notas = new PromediosExo();
            notas.setCurso(o.getNombreCurso());
            for(int j = 0; j<LPromMesOrdShow1.size();j++){
                PromediosExo P1 = LPromMesOrdShow1.get(j);
                if(P1.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setMes1(P1.getPromedioMes());
                }
            }
            for(int j = 0; j<LPromMesOrdShow2.size();j++){
                PromediosExo P2 = LPromMesOrdShow2.get(j);
                if(P2.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setMes2(P2.getPromedioMes());
                }
            }
            for(int j = 0; j<notaBimestral1.size();j++){
                PromediosExo NB = notaBimestral1.get(j);
                if(NB.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setNotaBimestral(NB.getNotaBimestral());
                }
            }
        LPromBimestral.add(notas);
        }
      NuevaListaProm = new PromediosExo().calculaPromBimestral(LPromBimestral, 1, (int)pesoB);
      return NuevaListaProm;
    }
    
    public  List<PromediosExo> notasSegundoBimestre(List<Utilidades> listaCurso, double pesoM, double pesoB){
        List<PromediosExo> LPromMesOrdShow1 = new PromediosExo().calculaPromedio(notaMes3, 3, (int)pesoM);
        List<PromediosExo> LPromMesOrdShow2 = new PromediosExo().calculaPromedio(notaMes4, 3, (int)pesoM);
        List<PromediosExo> LPromBimestral = new ArrayList<PromediosExo>();
        List<PromediosExo> NuevaListaProm = new ArrayList<PromediosExo>();
        PromediosExo notas = null;
        for(int i=0;i< listaCurso.size();i++){
            Utilidades o = listaCurso.get(i);
            notas = new PromediosExo();
            notas.setCurso(o.getNombreCurso());
            for(int j = 0; j<LPromMesOrdShow1.size();j++){
                PromediosExo P1 = LPromMesOrdShow1.get(j);
                if(P1.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setMes1(P1.getPromedioMes());
                }
            }
            for(int j = 0; j<LPromMesOrdShow2.size();j++){
                PromediosExo P2 = LPromMesOrdShow2.get(j);
                if(P2.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setMes2(P2.getPromedioMes());
                }
            }
            for(int j = 0; j<notaBimestral2.size();j++){
                PromediosExo NB = notaBimestral2.get(j);
                if(NB.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setNotaBimestral(NB.getNotaBimestral());
                }
            }
        LPromBimestral.add(notas);
        }
      NuevaListaProm = new PromediosExo().calculaPromBimestral(LPromBimestral, 1, (int)pesoB);
      return NuevaListaProm;
    }
    
    public  List<PromediosExo> notasTercerBimestre(List<Utilidades> listaCurso, double pesoM, double pesoB){
        List<PromediosExo> LPromMesOrdShow1 = new PromediosExo().calculaPromedio(notaMes5, 3, (int)pesoM);
        List<PromediosExo> LPromMesOrdShow2 = new PromediosExo().calculaPromedio(notaMes6, 3, (int)pesoM);
        List<PromediosExo> LPromBimestral = new ArrayList<PromediosExo>();
        List<PromediosExo> NuevaListaProm = new ArrayList<PromediosExo>();
        PromediosExo notas = null;
        for(int i=0;i< listaCurso.size();i++){
            Utilidades o = listaCurso.get(i);
            notas = new PromediosExo();
            notas.setCurso(o.getNombreCurso());
            for(int j = 0; j<LPromMesOrdShow1.size();j++){
                PromediosExo P1 = LPromMesOrdShow1.get(j);
                if(P1.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setMes1(P1.getPromedioMes());
                }
            }
            for(int j = 0; j<LPromMesOrdShow2.size();j++){
                PromediosExo P2 = LPromMesOrdShow2.get(j);
                if(P2.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setMes2(P2.getPromedioMes());
                }
            }
            for(int j = 0; j<notaBimestral3.size();j++){
                PromediosExo NB = notaBimestral3.get(j);
                if(NB.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setNotaBimestral(NB.getNotaBimestral());
                }
            }
        LPromBimestral.add(notas);
        }
      NuevaListaProm = new PromediosExo().calculaPromBimestral(LPromBimestral, 1, (int)pesoB);
      return NuevaListaProm;
    }
    
    public  List<PromediosExo> notasCuartoBimestreProy(List<Utilidades> listaCurso, double pesoM){
        List<PromediosExo> LPromMesOrdShow1 = new PromediosExo().calculaPromedio(notaMes7, 3, (int)pesoM);
        List<PromediosExo> LPromMesOrdShow2 = new PromediosExo().calculaPromedio(notaMes8, 3, (int)pesoM);
        List<PromediosExo> LPromBimestral = new ArrayList<PromediosExo>();
        List<PromediosExo> NuevaListaProm = new ArrayList<PromediosExo>();
        PromediosExo notas = null;
        for(int i=0;i< listaCurso.size();i++){
            Utilidades o = listaCurso.get(i);
            notas = new PromediosExo();
            notas.setCurso(o.getNombreCurso());
            for(int j = 0; j<LPromMesOrdShow1.size();j++){
                PromediosExo P1 = LPromMesOrdShow1.get(j);
                if(P1.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setMes1(P1.getPromedioMes());
                }
            }
            for(int j = 0; j<LPromMesOrdShow2.size();j++){
                PromediosExo P2 = LPromMesOrdShow2.get(j);
                if(P2.getCurso().equalsIgnoreCase(o.getNombreCurso())){
                    notas.setMes2(P2.getPromedioMes());
                    
                }
            }            
        LPromBimestral.add(notas);
        }
      NuevaListaProm = new PromediosExo().calculaPromBimestralProy(LPromBimestral, 1);
      return NuevaListaProm;
    }
    
    
    public  void llenarListas(List<PromediosExo> notas){
        PromediosExo actual = null;
        for(PromediosExo o:notas){
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNota1(o.getSemanal1());
            actual.setNota2(o.getSemanal2());
            actual.setNota3(o.getSemanal3());
            actual.setMensual(o. getMensual1());
            notaMes1.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNota1(o.getSemanal4());
            actual.setNota2(o.getSemanal5());
            actual.setNota3(o.getSemanal6());
            actual.setMensual(o. getMensual2());
            notaMes2.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNota1(o.getSemanal7());
            actual.setNota2(o.getSemanal8());
            actual.setNota3(o.getSemanal9());
            actual.setMensual(o. getMensual3());
            notaMes3.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNota1(o.getSemanal10());
            
            actual.setNota2(o.getSemanal11());
            actual.setNota3(o.getSemanal12());
            actual.setMensual(o. getMensual4());
            notaMes4.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNota1(o.getSemanal13());
            actual.setNota2(o.getSemanal14());
            actual.setNota3(o.getSemanal15());
            actual.setMensual(o. getMensual5());
            notaMes5.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNota1(o.getSemanal16());
            actual.setNota2(o.getSemanal17());
            actual.setNota3(o.getSemanal18());
            actual.setMensual(o. getMensual6());
            notaMes6.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNota1(o.getSemanal19());
            actual.setNota2(o.getSemanal20());
            actual.setNota3(o.getSemanal21());
            actual.setMensual(o. getMensual7());
            notaMes7.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNota1(o.getSemanal22());
            actual.setNota2(o.getSemanal23());
            actual.setNota3(o.getSemanal24());
            actual.setMensual(o. getMensual8());
            notaMes8.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNotaBimestral(o.getBimestral1());
            notaBimestral1.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNotaBimestral(o.getBimestral2());
            notaBimestral2.add(actual);
            actual = new PromediosExo();
            actual.setCurso(o.getCurso());
            actual.setNotaBimestral(o.getBimestral3());
            notaBimestral3.add(actual);
            
        }
        
    }
    
    private int tipoDescarga(String tipo)
    {
        if(tipo.equalsIgnoreCase("descargaArticulo"))
        {
            return 4;
        }
        else
        {
            if(tipo.equalsIgnoreCase("descargaRegla"))
            {
                return 5;
            }
            else
            {
                if(tipo.equalsIgnoreCase("descargaTramite"))
                {
                    return 6;
                }
                else
                {   
                     //descargaCurricula 
                        return  7;
                }
            }
        }
    }
    private String descarga(int tipo)
    {
        String rpta="";
        switch(tipo)
        {
            case 4: rpta="Articulo"; break;
            case 5: rpta="Reglamento"; break;
            case 6: rpta="FormTramite"; break;
            case 7: rpta="Curricula"; break;
        }
        return rpta;
    }
     protected void descargas(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException
     {
          response.setContentType("text/html;charset=UTF-8");
          PrintWriter out = response.getWriter();
          HttpSession session = request.getSession(true);
          
          try
          {
                ArrayList<Publicaciones> LDescargas = new ArrayList<Publicaciones>();
                int tipo=tipoDescarga(request.getParameter("accion"));
                LDescargas = Publicaciones.listaDescargas(tipo);
               
                request.setAttribute("descargas", LDescargas);
             this.getServletContext().getRequestDispatcher("/dinamica/apoderado/Descargas/Descarga"+descarga(tipo)+".jsp").forward(request, response);
          }
          finally
          {
               out.close();
          }
     } 
     
     // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
